package com.quanxiaoha.framework.biz.context.interceptor;


import com.quanxiaoha.framework.biz.context.holder.LoginUserContextHolder;
import com.quanxiaoha.framework.common.constant.GlobalConstants;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import lombok.extern.slf4j.Slf4j;

import java.util.Objects;

/**
 * @Author: jingyan_liu
 * @CreateTime: 2025-07-22
 * @Description: 用于向所有请求添加报头等目的拦截器
 * 1. 实现 RequestInterceptor 接口
 * 2. 实现 apply 方法，在请求发送前执行
 * 3. 可以通过 RequestTemplate 对象来修改请求头、请求参数等
 * 4. 可以通过 RequestTemplate 对象来获取请求头、请求参数等
 * 5. 可以通过 RequestTemplate 对象来获取请求的 URL、方法等
 * @Version: 1.0
 */


@Slf4j
public class FeignRequestInterceptor implements RequestInterceptor {
	
	@Override
	public void apply(RequestTemplate requestTemplate) {
		// 获取当前上下文中的用户 ID
		Long userId = LoginUserContextHolder.getUserId();
		
		// 若不为空，则添加到请求头中
		if (Objects.nonNull(userId)) {
			// 为请求添加一个头信息，值可以是字面量或者模板表达式
			requestTemplate.header(GlobalConstants.USER_ID, String.valueOf(userId));
			log.info("## feign 请求设置请求头 userId: {}", userId);
		}
	}
}
